/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package compilador.analisadorSintatico.comandos;

import compilador.analisadorLexico.Token;
import compilador.analisadorSintatico.Producao;
import compilador.analisadorSintatico.TokenReader;
import compilador.analisadorSintatico.metodos.*;
import compilador.analisadorSintatico.simboloGramatical.NaoTerminal;
import compilador.analisadorSintatico.simboloGramatical.SimboloGramatical;
import compilador.analisadorSintatico.simboloGramatical.Terminal;
/**
 *
 * @author João Matos
 *  <ATRIBUICAO> = <VARIAVEL> <ATRIBUIR_VALOR> ';' 
 */
public class ATRIBUICAO extends Producao {

    @Override
    public SimboloGramatical derivar() throws Exception {
        TokenReader tokenReader =  TokenReader.getInstance();
        Token t = tokenReader.seeCurrent();

        /*if(t.getAtributo().equals("=")){
            ((NaoTerminal) simbolo).add(new Terminal (t));
            t = tokenReader.consome();
        }else{
            erro("atribuição mal formada");
            return simbolo;
        }*/
        
        Producao p = new VARIAVEL();
        ((NaoTerminal) simbolo).add(p.derivar());

        //usa o see para não terminal
        t = tokenReader.seeCurrent();


        p = new ATRIBUIR_VALOR();
        ((NaoTerminal) simbolo).add(p.derivar());

        //consome, para os terminais

        t = tokenReader.seeCurrent();

        if(t.getAtributo().toString().equals(";")){
            System.out.print(";");
            ((NaoTerminal) simbolo).add(new Terminal(t));
            t = tokenReader.consome();
            return simbolo;
        }else{
            erro("Atribuição mal formada. ';' esperado");
            return simbolo;
        }
    }

    @Override
    public void setSimbolo() {
        simbolo = new NaoTerminal("ATRIBUICAO");
    }

}
